package com.gwl.concurrent.lock;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

import com.gwl.concurrent.IntGenerator;

public class MutexEvenGenerator extends IntGenerator {

	private int currentEvenValue = 0; 
	private Lock lock = new ReentrantLock(); 
	
	@Override
	public int next() { 
		lock.lock(); 
		try{ 
			++currentEvenValue; 
			Thread.yield();  //Cause failure faster 
			++currentEvenValue; 
			return currentEvenValue; 
		} finally { 
			lock.unlock(); 
		}
	} 
	
	public static void main(String[] args) {
		EvenChecker.test(new MutexEvenGenerator(), 5); 
	}

}
